import emitter from './emitter'
import router from '@/router'
import encrypt from './encrypt.js'
import { ElMessage } from 'element-plus'

/**
 * 错误代码映射表
 */

/**
 * 显示错误通知
 * @param {String} title - 标题
 * @param {String} message - 错误信息
 */
export const notifyError = (title, message) => {
  console.log('显示错误通知:', { title, message });
  
  if (!message || message === '') {
    message = '未知错误，请稍后再试';
  }
  
  showError(message || title)
}

/**
 * 显示成功通知
 * @param {String} title - 标题
 * @param {String} message - 成功信息
 */
export const notifySuccess = (title, message) => {
  emitter.emit('notification', {
    type: 'success',
    title,
    message,
    duration: 3000
  })
}

/**
 * 显示一般信息通知
 * @param {String} title - 标题
 * @param {String} message - 信息内容
 */
export const notifyInfo = (title, message) => {
  emitter.emit('notification', {
    type: 'info',
    title,
    message,
    duration: 3000
  })
}

/**
 * 处理API响应错误
 * @param {Object} response - API响应对象
 * @return {Boolean} - 返回是否为成功状态
 */
export const handleApiResponse = (response) => {
  if (!response) {
    notifyError('系统错误', '操作失败，请稍后再试')
    return false
  }

  // 成功状态
  if (response.code === 200) {
    return true
  }

  // 非200状态码，直接提取msg显示
  notifyError('系统错误', response.msg || '未知错误')
  
  // 特殊处理登录过期的情况
  if (response.code === '10051') {
    encrypt.RemoveLocalData('accessToken')
    encrypt.RemoveLocalData('refreshToken')
    encrypt.RemoveLocalData('userInfo')
    router.push('/login')
  }
  
  return false
}

/**
 * 处理请求错误
 * @param {Error} error - 错误对象
 */
export const handleRequestError = (error) => {
  console.log('请求错误:', error);
  
  let errorMessage = '网络错误，请稍后再试'
  
  // 尝试从错误响应中提取错误信息
  if (error.response && error.response.data && error.response.data.msg) {
    errorMessage = error.response.data.msg
  } else if (error.message && error.message.includes('timeout')) {
    errorMessage = '请求超时，服务器响应时间过长'
  } else if (error.message && error.message.includes('Network Error')) {
    errorMessage = '网络连接错误，请检查您的网络设置'
  }
  
  notifyError('请求错误', errorMessage)
}

// 统一的错误提示配置
export const showError = (message) => {
    // 检查是否是已知错误码
    const errorInfo = errorCodeMap[message] || { message }
    
    ElMessage({
        message: errorInfo.message,
        type: 'error',
        duration: 1000
    })

    // 如果需要重定向
    if (errorInfo.redirect) {
        encrypt.RemoveLocalData('accessToken')
        encrypt.RemoveLocalData('refreshToken')
        encrypt.RemoveLocalData('userInfo')
        router.push(errorInfo.redirect)
    }
}

// 统一的成功提示配置
export const showSuccess = (message) => {
    ElMessage({
        message: message,
        type: 'success',
        duration: 1000
    })
}

// 统一的API错误处理
export const handleApiError = (error) => {
    if (error.response?.data?.code) {
        // 如果是已知错误码
        showError(error.response.data.code)
    } else {
        // 其他错误
        showError(error.response?.data?.msg || '操作失败，请稍后重试')
    }
}

export default {
  handleApiResponse,
  handleRequestError,
  notifyError,
  notifySuccess,
  notifyInfo
}